import java.util.Scanner;

/**
 * @author gao
 * @date 2025/9/14 15:51
 */

public class Solution {
    int path, ret, aim;

    public int findTargetSumWays(int[] nums, int target) {
        aim = target;
        dfs(nums, 0);
        return ret;
    }

    /**
     * 深度优先搜索，用于遍历所有可能的加减组合
     * @param nums 数组
     * @param pos 当前处理的数字位置
     */
    private void dfs(int[] nums, int pos) {
        // 处理完数组所有元素
        if (pos == nums.length) {
            // 如果当前路径和等于目标值，则计数加一
            if (path == aim) {
                ret++;
            }
            return;
        }

        // 加上当前数字
        path += nums[pos];
        // 递归处理下一个数字
        dfs(nums, pos + 1);
        // 回溯
        path -= nums[pos];

        // 减去当前数字
        path -= nums[pos];
        // 递归处理下一个数字
        dfs(nums, pos + 1);
        // 回溯
        path += nums[pos];
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            int n = in.nextInt();
            int[] nums = new int[n];
            for (int i = 0; i < nums.length; i++) {
                nums[i] = in.nextInt();
            }
            int target = in.nextInt();
            Solution solution = new Solution();
            System.out.println(solution.findTargetSumWays(nums, target));
        }
    }
}